package com.example.demo.control;

import com.example.demo.service.PayService;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

@Controller
@RequestMapping("/pay")
public class PayControl {

    @Autowired
    private PayService payService;
    /**
     * 支付宝回调接口 —— notify_url
     * @param request
     * @param response
     */
    @PostMapping("/alipaycallback")
    public void alipaycallback(HttpServletRequest request, HttpServletResponse response) {
        //获取支付宝POST过来反馈信息
        Map<String, String> params = new HashMap<String, String>();
        Map requestParams = request.getParameterMap();
        //Iterator 是 Java 集合框架中的一个接口，位于 java.util 包下，
        //它为遍历集合（如 List、Set、Map 等）中的元素提供了一种统一的方式。
        //借助 Iterator，可以在不暴露集合内部实现细节的情况下，按顺序访问集合中的元素，同时还能在遍历过程中安全地移除元素。
        for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext(); ) {
            String name = (String)iter.next();
            String[] values = (String[])requestParams.get(name);
            String valueStr = "";
            for (int i = 0; i < values.length; i++) {
                valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
            }
            //乱码解决，这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化
            //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "gbk");
            params.put(name, valueStr);
        }
        //调用回调方法
        payService.alipaycallback(params);
    }

    /**
     * 支付宝支付回调接口 —— return_url
     * @return
     */
    @GetMapping(path = "/alipayreturnurl")
    String alipayReturnUrl() {
        return "alipaySuccess";
    }

}
